Case study on Moneyball

  1. Bases on balls (BB): the pitcher fails to throw the ball through a predefined area considered to be hittable (the strike zone), so the batter is permitted to go to first base.

  2. Single: the batter hits the ball and gets to first base.

  3. Double (2B): the batter hits the ball and gets to second base.

  4. Triple (3B): the batter hits the ball and gets to third base.

  5. Home Run (HR): the batter hits the ball and goes all the way home and scores a run.

The visualization of choice when exploring the relationship between two variables like home runs and runs is a scatterplot.

What is the aplication of statistics and data science to baseball called?

Sabermetrics

What is the outcome is not included in the batting average?

A base on balls

Why do we consider team statistics as well as individual player statistcs?

Team statistics are important because the success of individual players depends also on the strength of their team.

You want to know whether teams with more at-bats per game have more runs per game.

Load the Lahman library. Filter the Teams data frame to include years from 1961 to 2001. Make a scatterplot of runs per game versus at bats (AB) per game.

Use the filtered Teams data frame from Question 6. Make a scatterplot of win rate (number of wins per game) versus number of fielding errors (E) per game.

Which of the following is true?

When you examine the scatterplot above, you can see a clear trend towards decreased win rate with increasing number of errors per game.

Use the filtered Teams data frame from Question 6. Make a scatterplot of triples (X3B) per game versus doubles (X2B) per game.

Correlation - Case Study: is height hereditary?

       father    son
father 1.0000 0.4334
son    0.4334 1.0000
[1] 0.4334

[1] 0.4292
[1] 0.1664

*Questions:

Francis Galton developed the concept of correlation while study heredity.

The correlation coefficient is a summary of the trend between two variables.

The standard deviation describes the dispersion of a variable; the mean is a description of a variable’s central tendency; the distribution of a variable (e.g., normal, log-normal) describes the possible values of your data and the probability of them occurring.

Explanation Because the expected value of the sample correlation is the population correlation, it should stay approximately the same even if the sample size is increased.

Explanation

As the sample size N increases, the standard deviation of the sample correlation should decrease.

Explanation

Variables that are independent of each other have a correlation coefficient of 0.

[1] 0.6581

The solution for this correlation is cor(runs per game, at bats per game) = 0.6581

answer : correlation = -0.3397

[1] -0.01157

answer: correlation = -0.0116

LS0tDQp0aXRsZTogIlJlZ3Jlc3Npb24gTGVjdHVyZXMiDQpvdXRwdXQ6DQogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQNCiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0DQogIHdvcmRfZG9jdW1lbnQ6IGRlZmF1bHQNCi0tLQ0KDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0Kb3B0aW9ucyhkaWdpdHMgPSA0KQ0KbGlicmFyeShMYWhtYW4pDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoZ2dFeHRyYSkNCmxpYnJhcnkoZHNsYWJzKQ0KbGlicmFyeShwbG90bHkpDQpsaWJyYXJ5KGNvcnJwbG90KQ0KZHNfdGhlbWVfc2V0KCkNCmBgYA0KDQojIyMgQ2FzZSBzdHVkeSBvbiBNb25leWJhbGwNCg0KKiBCaWxsIEphbWVzIHdhcyB0aGUgb3JpZ2luYXRvciBvZiB0aGUgKipzYWJlcm1ldHJpY3MqKiwgdGhlIGFwcHJvYWNoIG9mIHVzaW5nIGRhdGEgdG8gcHJlZGljdCB3aGF0IG91dGNvbWVzIGJlc3QgcHJlZGljdGVkIGlmIGEgdGVhbSB3b3VsZCB3aW4uDQoNCiogVGhlIGdvYWwgb2YgYmFzZWJhbGwgZ2FtZSBpcyB0byBzY29yZSBtb3JlIHJ1bnMsIHRoYW4gdGhlIG90aGVyIHRlYW0uDQoNCiogRWFjaCB0ZWFtIGhhcyA5IGJhdHRlcnMgd2hvIGhhdmUgYW4gb3Bwb3J0dW5pdHkgdG8gaGl0IGEgYmFsbCB3aXRoIGEgYmF0IGluIGEgcHJlZGV0ZXJtaW5lZCBvcmRlci4NCg0KKiBFYWNoIHRpbWUgYSBiYXR0ZXIgaGFzIGFuIG9wcG9ydHVuaXR5IHRvIGJhdCwgd2UgY2FsbCBpdCBhIHBsYXRlIGFwcGVhcmFuY2UgKFBBKS4NCg0KKiBUaGUgUEEgZW5kcyB3aXRoIGEgYmluYXJ5IG91dGNvbWU6IHRoZSBiYXR0ZXIgZWl0aGVyIG1ha2VzIGFuIG91dCAoZmFpbHVyZSkgYW5kIHJldHVybnMgdG8gdGhlIGJlbmNoIG9yIHRoZSBiYXR0ZXIgZG9lc27igJl0IChzdWNjZXNzKSBhbmQgY2FuIHJ1biBhcm91bmQgdGhlIGJhc2VzLCBhbmQgcG90ZW50aWFsbHkgc2NvcmUgYSBydW4gKHJlYWNoIGFsbCA0IGJhc2VzKS4NCg0KKiBUaGVyZSBhcmUgZml2ZSB3YXlzIGEgYmF0dGVyIGNhbiBzdWNjZWVkIChub3QgbWFrZSBhbiBvdXQpOg0KDQoxLiBCYXNlcyBvbiBiYWxscyAoQkIpOiB0aGUgcGl0Y2hlciBmYWlscyB0byB0aHJvdyB0aGUgYmFsbCB0aHJvdWdoIGEgcHJlZGVmaW5lZCBhcmVhIGNvbnNpZGVyZWQgdG8gYmUgaGl0dGFibGUgKHRoZSBzdHJpa2Ugem9uZSksIHNvIHRoZSBiYXR0ZXIgaXMgcGVybWl0dGVkIHRvIGdvIHRvIGZpcnN0IGJhc2UuDQoNCjIuIFNpbmdsZTogdGhlIGJhdHRlciBoaXRzIHRoZSBiYWxsIGFuZCBnZXRzIHRvIGZpcnN0IGJhc2UuDQoNCjMuIERvdWJsZSAoMkIpOiB0aGUgYmF0dGVyIGhpdHMgdGhlIGJhbGwgYW5kIGdldHMgdG8gc2Vjb25kIGJhc2UuDQoNCjQuIFRyaXBsZSAoM0IpOiB0aGUgYmF0dGVyIGhpdHMgdGhlIGJhbGwgYW5kIGdldHMgdG8gdGhpcmQgYmFzZS4NCg0KNS4gSG9tZSBSdW4gKEhSKTogdGhlIGJhdHRlciBoaXRzIHRoZSBiYWxsIGFuZCBnb2VzIGFsbCB0aGUgd2F5IGhvbWUgYW5kIHNjb3JlcyBhIHJ1bi4NCg0KKiBIaXN0b3JpY2FsbHksIHRoZSBiYXR0aW5nIGF2ZXJhZ2UgaGFzIGJlZW4gY29uc2lkZXJlZCB0aGUgbW9zdCBpbXBvcnRhbnQgb2ZmZW5zaXZlIHN0YXRpc3RpYy4gVG8gZGVmaW5lIHRoaXMgYXZlcmFnZSwgd2UgZGVmaW5lIGEgaGl0IChIKSBhbmQgYW4gYXQgYmF0IChBQikuIFNpbmdsZXMsIGRvdWJsZXMsIHRyaXBsZXMgYW5kIGhvbWUgcnVucyBhcmUgaGl0cy4gVGhlIGZpZnRoIHdheSB0byBiZSBzdWNjZXNzZnVsLCBhIHdhbGsgKEJCKSwgaXMgbm90IGEgaGl0LiBBbiBBQiBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHlvdSBlaXRoZXIgZ2V0IGEgaGl0IG9yIG1ha2UgYW4gb3V0OyBCQnMgYXJlIGV4Y2x1ZGVkLiAqKlRoZSBiYXR0aW5nIGF2ZXJhZ2UgaXMgc2ltcGx5IEgvQUIgYW5kIGlzIGNvbnNpZGVyZWQgdGhlIG1haW4gbWVhc3VyZSBvZiBhIHN1Y2Nlc3MgcmF0ZS4qKg0KDQpUaGUgdmlzdWFsaXphdGlvbiBvZiBjaG9pY2Ugd2hlbiBleHBsb3JpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHR3byB2YXJpYWJsZXMgbGlrZSBob21lIHJ1bnMgYW5kIHJ1bnMgaXMgYSAqKnNjYXR0ZXJwbG90KiouDQoNCmBgYHtyIHBsb3RzLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0NCg0KDQoNClRlYW1zICU+JSBmaWx0ZXIoeWVhcklEICVpbiUgMTk2MToyMDAxKSAlPiUNCiAgICBtdXRhdGUoSFJfcGVyX2dhbWUgPSBIUiAvIEcsIFJfcGVyX2dhbWUgPSBSIC8gRykgJT4lDQogICAgZ2dwbG90KGFlcyhIUl9wZXJfZ2FtZSwgUl9wZXJfZ2FtZSkpICsgDQogICAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNSkNCmBgYA0KDQpgYGB7ciBwbG90czIsIGluY2x1ZGU9RkFMU0V9DQoNCiNTY2F0dGVycGxvdCBvZiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gc3RvbGVuIGJhc2VzIGFuZCB3aW5zDQpUZWFtcyAlPiUgZmlsdGVyKHllYXJJRCAlaW4lIDE5NjE6MjAwMSkgJT4lDQogICAgbXV0YXRlKFNCX3Blcl9nYW1lID0gU0IgLyBHLCBSX3Blcl9nYW1lID0gUiAvIEcpICU+JQ0KICAgIGdncGxvdChhZXMoU0JfcGVyX2dhbWUsIFJfcGVyX2dhbWUpKSArIA0KICAgIGdlb21fcG9pbnQoYWxwaGEgPSAwLjUpDQpgYGANCg0KYGBge3IgcGxvdHMzLCBpbmNsdWRlPUZBTFNFfQ0KDQojU2NhdHRlcnBsb3Qgb2YgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGJhc2VzIG9uIGJhbGxzIGFuZCBydW5zDQpUZWFtcyAlPiUgZmlsdGVyKHllYXJJRCAlaW4lIDE5NjE6MjAwMSkgJT4lDQogICAgbXV0YXRlKEJCX3Blcl9nYW1lID0gQkIgLyBHLCBSX3Blcl9nYW1lID0gUiAvIEcpICU+JQ0KICAgIGdncGxvdChhZXMoQkJfcGVyX2dhbWUsIFJfcGVyX2dhbWUpKSArIA0KICAgIGdlb21fcG9pbnQoYWxwaGEgPSAwLjUpDQpgYGANCg0KKiBRdWVzdGlvbjENCg0KV2hhdCBpcyB0aGUgYXBsaWNhdGlvbiBvZiBzdGF0aXN0aWNzIGFuZCBkYXRhIHNjaWVuY2UgdG8gYmFzZWJhbGwgY2FsbGVkPw0KDQoqU2FiZXJtZXRyaWNzKg0KDQoqIFF1ZXN0aW9uMg0KDQpXaGF0IGlzIHRoZSBvdXRjb21lIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgYmF0dGluZyBhdmVyYWdlPw0KDQoqQSBiYXNlIG9uIGJhbGxzKg0KDQoqIFF1ZXN0aW9uMw0KDQpXaHkgZG8gd2UgY29uc2lkZXIgdGVhbSBzdGF0aXN0aWNzIGFzIHdlbGwgYXMgaW5kaXZpZHVhbCBwbGF5ZXIgc3RhdGlzdGNzPw0KDQpUZWFtIHN0YXRpc3RpY3MgYXJlIGltcG9ydGFudCBiZWNhdXNlIHRoZSBzdWNjZXNzIG9mIGluZGl2aWR1YWwgcGxheWVycyBkZXBlbmRzIGFsc28gb24gdGhlIHN0cmVuZ3RoIG9mIHRoZWlyIHRlYW0uDQoNCiogUXVlc3Rpb240DQoNCllvdSB3YW50IHRvIGtub3cgd2hldGhlciB0ZWFtcyB3aXRoIG1vcmUgYXQtYmF0cyBwZXIgZ2FtZSBoYXZlIG1vcmUgcnVucyBwZXIgZ2FtZS4NCg0KYGBge3IgZWNobz1GQUxTRX0NCg0KDQpwIDwtIFRlYW1zICU+JSBmaWx0ZXIoeWVhcklEICVpbiUgMTk2MToyMDAxICkgJT4lDQogICAgbXV0YXRlKEFCX3Blcl9nYW1lID0gQUIvRywgUl9wZXJfZ2FtZSA9IFIvRykgJT4lDQogICAgZ2dwbG90KGFlcyhBQl9wZXJfZ2FtZSwgUl9wZXJfZ2FtZSkpICsgDQogICAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNSkgKw0KICAgIGxhYnMoeCA9ICdhdC1iYXRzIHBlciBnYW1lJywgeSA9ICdSdW5zIHBlciBnYW1lJywgdGl0bGUgPSAnUmVsYXRpb25zaGlwIChhdC1iYXRzIHggcnVucykgcGVyIGdhbWUnICkNCg0KDQpwMSA8LSBnZ01hcmdpbmFsKHAsIHR5cGUgPSAiaGlzdG9ncmFtIiwgY29sb3IgPSAnYmxhY2snLCBmaWxsID0gJ3B1cnBsZScpDQoNCnAxDQpgYGANCg0KKiBRdWVzdGlvbjYNCg0KTG9hZCB0aGUgTGFobWFuIGxpYnJhcnkuIEZpbHRlciB0aGUgVGVhbXMgZGF0YSBmcmFtZSB0byBpbmNsdWRlIHllYXJzIGZyb20gMTk2MSB0byAyMDAxLiBNYWtlIGEgc2NhdHRlcnBsb3Qgb2YgcnVucyBwZXIgZ2FtZSB2ZXJzdXMgYXQgYmF0cyAoQUIpIHBlciBnYW1lLg0KDQpgYGB7ciBwbG90NSwgZWNobz1GQUxTRX0NCg0KcCA8LSBUZWFtcyAlPiUgDQogICAgIGZpbHRlcih5ZWFySUQgJWluJSAxOTYxOjIwMDEpICU+JQ0KICAgICBtdXRhdGUocnVuc19wZXJfZ2FtZSA9IFIvRywgQUJfcGVyX2dhbWUgPSBBQi9HKSAlPiUNCiAgICAgZ2dwbG90KGFlcyhydW5zX3Blcl9nYW1lLCBBQl9wZXJfZ2FtZSkpICsNCiAgICAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNSkgKw0KICAgICBnZW9tX3Ntb290aChtZXRob2QgPSBsbSwgY29sb3IgPSAicmVkIiwgc2UgPSBGQUxTRSkNCmdncGxvdGx5KHApDQpgYGANCg0KKiBRdWVzdGlvbjcNCg0KVXNlIHRoZSBmaWx0ZXJlZCBUZWFtcyBkYXRhIGZyYW1lIGZyb20gUXVlc3Rpb24gNi4gTWFrZSBhIHNjYXR0ZXJwbG90IG9mIHdpbiByYXRlIChudW1iZXIgb2Ygd2lucyBwZXIgZ2FtZSkgdmVyc3VzIG51bWJlciBvZiBmaWVsZGluZyBlcnJvcnMgKEUpIHBlciBnYW1lLg0KDQoNCldoaWNoIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZT8NCg0KYGBge3IgcTcsIGVjaG89RkFMU0V9DQoNCnAgPC0gVGVhbXMgJT4lIA0KICAgICBmaWx0ZXIoeWVhcklEICVpbiUgMTk2MToyMDAxKSAlPiUNCiAgICAgbXV0YXRlKHdpbl9yYXRlID0gVy9HLCBFX3JhdGUgPSBFL0cpICU+JQ0KICAgICBnZ3Bsb3QoYWVzKHdpbl9yYXRlLCBFX3JhdGUpKSArDQogICAgIGdlb21fcG9pbnQoYWxwaGEgPSAwLjUpICsNCiAgICAgbGFicyh4ID0gJ1dpbnMgcGVyIGdhbWUnLCB5ID0gJ0ZpZWxkaW5nIGVycm9ycyBwZXIgZ2FtZScpICsNCiAgICAgZ2VvbV9zbW9vdGgobWV0aG9kID0gbG0sIGNvbG9yID0gInJlZCIsIHNlID0gRkFMU0UpDQpnZ3Bsb3RseShwKQ0KYGBgDQoNCldoZW4geW91IGV4YW1pbmUgdGhlIHNjYXR0ZXJwbG90IGFib3ZlLCB5b3UgY2FuIHNlZSBhIGNsZWFyIHRyZW5kIHRvd2FyZHMgZGVjcmVhc2VkIHdpbiByYXRlIHdpdGggaW5jcmVhc2luZyBudW1iZXIgb2YgZXJyb3JzIHBlciBnYW1lLg0KDQoqIFF1ZXN0aW9uOA0KDQpVc2UgdGhlIGZpbHRlcmVkIFRlYW1zIGRhdGEgZnJhbWUgZnJvbSBRdWVzdGlvbiA2LiBNYWtlIGEgc2NhdHRlcnBsb3Qgb2YgdHJpcGxlcyAoWDNCKSBwZXIgZ2FtZSB2ZXJzdXMgZG91YmxlcyAoWDJCKSBwZXIgZ2FtZS4NCg0KYGBge3IgcTgsIGVjaG89RkFMU0V9DQoNCnAgPC0gVGVhbXMgJT4lIA0KICAgICBmaWx0ZXIoeWVhcklEICVpbiUgMTk2MToyMDAxKSAlPiUNCiAgICAgbXV0YXRlKHRyaXBsZXNfcGVyX2dhbWUgPSBYM0IvRywgZG91Ymxlc19wZXJfZ2FtZSA9IFgyQi9HKSAlPiUNCiAgICAgZ2dwbG90KGFlcyh0cmlwbGVzX3Blcl9nYW1lLCBkb3VibGVzX3Blcl9nYW1lKSkgKw0KICAgICBnZW9tX3BvaW50KGFscGhhID0gMC41KSArDQogICAgIGxhYnMoeCA9ICdUcmlwbGVzIHBlciBnYW1lJywgeSA9ICdEb3VibGVzIHBlciBnYW1lJykgKw0KICAgICBnZW9tX3Ntb290aChtZXRob2QgPSBsbSwgY29sb3IgPSAicmVkIiwgc2UgPSBGQUxTRSkNCmdncGxvdGx5KHApDQpgYGANCg0KIyMjIENvcnJlbGF0aW9uIC0gQ2FzZSBTdHVkeTogaXMgaGVpZ2h0IGhlcmVkaXRhcnk/DQoNCg0KDQoqIEdhbHRvbiB0cmllZCB0byBwcmVkaWN0IHNvbnMnIGhlaWdodHMgYmFzZWQgb24gZmF0aGVycycgaGVpZ2h0cy4NCg0KKiBUaGUgbWVhbiBhbmQgc3RhbmRhcmQgZXJyb3JzIGFyZSBpbnN1ZmZpY2llbnQgZm9yIGRlc2NyaWJpbmcgYW4gaW1wb3J0YW50IGNoYXJhY3RlcmlzdGljIG9mIHRoZSBkYXRhOiB0aGUgdHJlbmQgdGhhdCB0aGUgdGFsbGVyIHRoZSBmYXRoZXIsIHRoZSB0YWxsZXIgdGhlIHNvbi4NCg0KKiBUaGUgKipjb3JyZWxhdGlvbiBjb2VmZmljaWVudCoqIGlzIGFuIGluZm9ybWF0aXZlIHN1bW1hcnkgb2YgaG93IHR3byB2YXJpYWJsZXMgbW92ZSB0b2dldGhlciB0aGF0IGNhbiBiZSB1c2VkIHRvIHByZWRpY3Qgb25lIHZhcmlhYmxlIHVzaW5nIHRoZSBvdGhlci4NCg0KYGBge3IgR2FsdG9uLWRhdGEsIGVjaG89RkFMU0V9DQoNCmxpYnJhcnkoSGlzdERhdGEpDQpkYXRhKCJHYWx0b25GYW1pbGllcyIpDQpzZXQuc2VlZCgxOTgzKQ0KDQojZ2xpbXBzZShHYWx0b25GYW1pbGllcykNCg0KZ2FsdG9uX2hlaWdodHMgPC0gR2FsdG9uRmFtaWxpZXMgJT4lDQogIGZpbHRlcihnZW5kZXIgPT0gIm1hbGUiKSAlPiUNCiAgZ3JvdXBfYnkoZmFtaWx5KSAlPiUNCiAgc2FtcGxlX24oMSkgJT4lICAjIHNlbGVjaW9uYSBuIGFtb3N0cmFzIHBvciBsaW5oYSBkZSB1bWEgdGFiZWxhDQogIHVuZ3JvdXAoKSAlPiUNCiAgc2VsZWN0KGZhdGhlciwgY2hpbGRIZWlnaHQpICU+JQ0KICByZW5hbWUoc29uID0gY2hpbGRIZWlnaHQpDQojIGhlYWQoZ2FsdG9uX2hlaWdodHMpDQoNCiMgbWVhbnMgYW5kIHN0YW5kYXJkIGRldmlhdGlvbnMNCmdhbHRvbl9oZWlnaHRzICU+JQ0KICAgIHN1bW1hcml6ZShtZWFuKGZhdGhlciksIHNkKGZhdGhlciksIG1lYW4oc29uKSwgc2Qoc29uKSkNCmBgYA0KDQpgYGB7ciBwbG90LUdhbHRvbi1maWx0ZXJlZC1kYXRhLCBlY2hvPUZBTFNFfQ0KDQojIHNjYXR0ZXJwbG90IG9mIGZhdGhlciBhbmQgc29uIGhlaWdodHMNCmdhbHRvbl9oZWlnaHRzICU+JQ0KICAgIGdncGxvdChhZXMoZmF0aGVyLCBzb24pKSArDQogICAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNSkNCmBgYA0KDQpgYGB7ciBtYXRyaXgtY29ycmVsYXRpb24sIGVjaG89RkFMU0V9DQoNCm1jb3IgPC0gY29yKGdhbHRvbl9oZWlnaHRzKQ0KbWNvcg0KDQoNCmdhbHRvbl9oZWlnaHRzICU+JSBzdW1tYXJpemUociA9IGNvcihmYXRoZXIsIHNvbikpICU+JSBwdWxsKHIpDQpjb3JycGxvdChtY29yKQ0KYGBgDQoNCiogVGhlIGNvcnJlbGF0aW9uIHRoYXQgd2UgY29tcHV0ZSBhbmQgdXNlIGFzIGEgc3VtbWFyeSBpcyBhIHJhbmRvbSB2YXJpYWJsZS4NCg0KKiBXaGVuIGludGVycHJldGluZyBjb3JyZWxhdGlvbnMsIGl0IGlzIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IGNvcnJlbGF0aW9ucyBkZXJpdmVkIGZyb20gc2FtcGxlcyBhcmUgZXN0aW1hdGVzIGNvbnRhaW5pbmcgdW5jZXJ0YWludHkuDQoNCiogQmVjYXVzZSB0aGUgc2FtcGxlIGNvcnJlbGF0aW9uIGlzIGFuIGF2ZXJhZ2Ugb2YgaW5kZXBlbmRlbnQgZHJhd3MsIHRoZSBjZW50cmFsIGxpbWl0IHRoZW9yZW0gYXBwbGllcy4gDQoNCmBgYHtyIHNhbXBsZS1jb3JyZWxhdGlvbiwgZWNobz1GQUxTRX0NCg0KIyBjb21wdXRlIHNhbXBsZSBjb3JyZWxhdGlvbg0KUiA8LSBzYW1wbGVfbihnYWx0b25faGVpZ2h0cywgMjUsIHJlcGxhY2UgPSBUUlVFKSAlPiUNCiAgICBzdW1tYXJpemUociA9IGNvcihmYXRoZXIsIHNvbikpDQpSDQoNCiMgTW9udGUgQ2FybG8gc2ltdWxhdGlvbiB0byBzaG93IGRpc3RyaWJ1dGlvbiBvZiBzYW1wbGUgY29ycmVsYXRpb24NCkIgPC0gMTAwMA0KTiA8LSAyNQ0KUiA8LSByZXBsaWNhdGUoQiwgew0KICAgIHNhbXBsZV9uKGdhbHRvbl9oZWlnaHRzLCBOLCByZXBsYWNlID0gVFJVRSkgJT4lDQogICAgc3VtbWFyaXplKHIgPSBjb3IoZmF0aGVyLCBzb24pKSAlPiUNCiAgICBwdWxsKHIpDQp9KQ0KcXBsb3QoUiwgZ2VvbSA9ICJoaXN0b2dyYW0iLCBiaW53aWR0aCA9IDAuMDUsIGNvbG9yID0gSSgiYmxhY2siKSkNCg0KIyBleHBlY3RlZCB2YWx1ZSBhbmQgc3RhbmRhcmQgZXJyb3INCm1lYW4oUikNCnNkKFIpDQojIFFRLXBsb3QgdG8gZXZhbHVhdGUgd2hldGhlciBOIGlzIGxhcmdlIGVub3VnaA0KZGF0YS5mcmFtZShSKSAlPiUNCiAgICBnZ3Bsb3QoYWVzKHNhbXBsZSA9IFIpKSArDQogICAgc3RhdF9xcSgpICsNCiAgICBnZW9tX2FibGluZShpbnRlcmNlcHQgPSBtZWFuKFIpLCBzbG9wZSA9IHNxcnQoKDEtbWVhbihSKV4yKS8oTi0yKSkpDQpgYGANCg0KKlF1ZXN0aW9uczoNCg0KKiAxLldoaWxlIHN0dWR5aW5nIGhlcmVkaXR5LCBGcmFuY2lzIEdhbHRvbiBkZXZlbG9wZWQgd2hhdCBpbXBvcnRhbnQgc3RhdGlzdGljYWwgY29uY2VwdD8NCg0KKkZyYW5jaXMgR2FsdG9uIGRldmVsb3BlZCB0aGUgY29uY2VwdCBvZiBjb3JyZWxhdGlvbiB3aGlsZSBzdHVkeSBoZXJlZGl0eS4qDQoNCiogMi5UaGUgY29ycmVsYXRpb24gY29lZmZpY2llbnQgaXMgYSBzdW1tYXJ5IG9mIHdoYXQ/DQoNCipUaGUgY29ycmVsYXRpb24gY29lZmZpY2llbnQgaXMgYSBzdW1tYXJ5IG9mIHRoZSB0cmVuZCBiZXR3ZWVuIHR3byB2YXJpYWJsZXMuKg0KDQoqVGhlIHN0YW5kYXJkIGRldmlhdGlvbiBkZXNjcmliZXMgdGhlIGRpc3BlcnNpb24gb2YgYSB2YXJpYWJsZTsgdGhlIG1lYW4gaXMgYSBkZXNjcmlwdGlvbiBvZiBhIHZhcmlhYmxl4oCZcyBjZW50cmFsIHRlbmRlbmN5OyB0aGUgZGlzdHJpYnV0aW9uIG9mIGEgdmFyaWFibGUgKGUuZy4sIG5vcm1hbCwgbG9nLW5vcm1hbCkgZGVzY3JpYmVzIHRoZSBwb3NzaWJsZSB2YWx1ZXMgb2YgeW91ciBkYXRhIGFuZCB0aGUgcHJvYmFiaWxpdHkgb2YgdGhlbSBvY2N1cnJpbmcuKg0KDQoqIDQuIEluc3RlYWQgb2YgcnVubmluZyBhIE1vbnRlIENhcmxvIHNpbXVsYXRpb24gd2l0aCBhIHNhbXBsZSBzaXplIG9mIDI1IGZyb20gdGhlIDE3OSBmYXRoZXItc29uIHBhaXJzIGRlc2NyaWJlZCBpbiB0aGUgdmlkZW9zLCB3ZSBub3cgcnVuIG91ciBzaW11bGF0aW9uIHdpdGggYSBzYW1wbGUgc2l6ZSBvZiA1MC4NCldvdWxkIHlvdSBleHBlY3QgdGhlICoqZXhwZWN0ZWQgdmFsdWUqKiBvZiBvdXIgc2FtcGxlIGNvcnJlbGF0aW9uIHRvIGluY3JlYXNlLCBkZWNyZWFzZSwgb3Igc3RheSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lPw0KDQpFeHBsYW5hdGlvbg0KKkJlY2F1c2UgdGhlIGV4cGVjdGVkIHZhbHVlIG9mIHRoZSBzYW1wbGUgY29ycmVsYXRpb24gaXMgdGhlIHBvcHVsYXRpb24gY29ycmVsYXRpb24sIGl0IHNob3VsZCBzdGF5IGFwcHJveGltYXRlbHkgdGhlIHNhbWUgZXZlbiBpZiB0aGUgc2FtcGxlIHNpemUgaXMgaW5jcmVhc2VkLioNCg0KKiA1LiBJbnN0ZWFkIG9mIHJ1bm5pbmcgYSBNb250ZSBDYXJsbyBzaW11bGF0aW9uIHdpdGggYSBzYW1wbGUgc2l6ZSBvZiAyNSBmcm9tIHRoZSAxNzkgZmF0aGVyLXNvbiBwYWlycyBkZXNjcmliZWQgaW4gdGhlIHZpZGVvcywgd2Ugbm93IHJ1biBvdXIgc2ltdWxhdGlvbiB3aXRoIGEgc2FtcGxlIHNpemUgb2YgNTAuDQpXb3VsZCB5b3UgZXhwZWN0IHRoZSAqKnN0YW5kYXJkIGVycm9yKiogb2Ygb3VyIHNhbXBsZSBjb3JyZWxhdGlvbiB0byBpbmNyZWFzZSwgZGVjcmVhc2UsIG9yIHN0YXkgYXBwcm94aW1hdGVseSB0aGUgc2FtZT8NCg0KRXhwbGFuYXRpb24NCg0KKkFzIHRoZSBzYW1wbGUgc2l6ZSBOIGluY3JlYXNlcywgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiB0aGUgc2FtcGxlIGNvcnJlbGF0aW9uIHNob3VsZCBkZWNyZWFzZS4qDQoNCiogNi4gSWYgWCBhbmQgWSBhcmUgY29tcGxldGVseSBpbmRlcGVuZGVudCwgd2hhdCBkbyB5b3UgZXhwZWN0IHRoZSB2YWx1ZSBvZiB0aGUgY29ycmVsYXRpb24gY29lZmZpY2llbnQgdG8gYmU/DQoNCkV4cGxhbmF0aW9uDQoNCipWYXJpYWJsZXMgdGhhdCBhcmUgaW5kZXBlbmRlbnQgb2YgZWFjaCBvdGhlciBoYXZlIGEgY29ycmVsYXRpb24gY29lZmZpY2llbnQgb2YgMC4qDQoNCiogNy4gTG9hZCB0aGUgTGFobWFuIGxpYnJhcnkuIEZpbHRlciB0aGUgVGVhbXMgZGF0YSBmcmFtZSB0byBpbmNsdWRlIHllYXJzIGZyb20gMTk2MSB0byAyMDAxLg0KV2hhdCBpcyB0aGUgY29ycmVsYXRpb24gY29lZmZpY2llbnQgYmV0d2VlbiBudW1iZXIgb2YgcnVucyBwZXIgZ2FtZSBhbmQgbnVtYmVyIG9mIGF0IGJhdHMgcGVyIGdhbWU/DQoNCmBgYHtyIDdxLCBlY2hvPUZBTFNFfQ0KDQpjb3JyIDwtIFRlYW1zICU+JSBmaWx0ZXIoeWVhcklEICVpbiUgMTk2MToyMDAxICkgJT4lDQogICAgbXV0YXRlKEFCX3Blcl9nYW1lID0gQUIvRywgUl9wZXJfZ2FtZSA9IFIvRykgJT4lDQogICAgc3VtbWFyaXplKHIgPSBjb3IoQUJfcGVyX2dhbWUsIFJfcGVyX2dhbWUpKSAlPiUgDQogICAgcHVsbChyKQ0KY29ycg0KYGBgDQoNClRoZSBzb2x1dGlvbiBmb3IgdGhpcyBjb3JyZWxhdGlvbiBpcyBjb3IocnVucyBwZXIgZ2FtZSwgYXQgYmF0cyBwZXIgZ2FtZSkgPSBgciBjb3JyYA0KDQoqIDguIFVzZSB0aGUgc2FtZSBmaWx0ZXJlZCBkYXRhc2V0IGZyb20gcHJldmlvdXMgcXVlc3Rpb24uIA0KV2hhdCBpcyB0aGUgY29ycmVsYXRpb24gY29lZmZjaWVudCBiZXR3ZWVuIHdpbiByYXRlIChudW1iZXIgb2Ygd2luIHBlciBnYW1lIGFuZCBudW1iZXIgb2YgZXJyb3JzIHBlciBnYW1lKT8gDQpzb2x1dGlvbjoNCg0KYGBge3IgOHEsIGVjaG89RkFMU0V9DQoNCmNvcnIxIDwtIFRlYW1zICU+JSANCiAgICBmaWx0ZXIoeWVhcklEICVpbiUgMTk2MToyMDAxICkgJT4lDQogICAgbXV0YXRlKHdpbl9yYXRlID0gVy9HLCBFX3JhdGUgPSBFL0cpICU+JSANCiAgICBzdW1tYXJpemUociA9IGNvcih3aW5fcmF0ZSwgRV9yYXRlKSkgJT4lIA0KICAgIHB1bGwocikNCmNvcnIxDQpgYGANCmFuc3dlciA6ICoqY29ycmVsYXRpb24gPSBgciBjb3JyMWAgKioNCg0KKiA5LiBXaGF0IGlzIHRoZSBjb3JyZWxhdGlvbiBjb2VmZmljaWVudCBiZXR3ZWVuIGRvdWJsZXMoWDJCKSBwZXIgZ2FtZSBhbmQgdHJpcGxlcyAoWDNCKSBwZXIgZ2FtZT8NCg0KYGBge3IgOXEsIGVjaG89RkFMU0V9DQoNCmNvcnIyIDwtIFRlYW1zICU+JSANCiAgICAgZmlsdGVyKHllYXJJRCAlaW4lIDE5NjE6MjAwMSkgJT4lDQogICAgIG11dGF0ZSh0cmlwbGVzX3Blcl9nYW1lID0gWDNCL0csIGRvdWJsZXNfcGVyX2dhbWUgPSBYMkIvRykgJT4lICAgICAgc3VtbWFyaXplKHIgPSBjb3IodHJpcGxlc19wZXJfZ2FtZSwgZG91Ymxlc19wZXJfZ2FtZSkpICU+JSANCiAgICAgcHVsbChyKQ0KDQpjb3JyMg0KYGBgDQoNCmFuc3dlcjogKipjb3JyZWxhdGlvbiA9IGByIGNvcnIyYCAqKg0K